package com.fauks.gmall.manager.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.fauks.gmall.bean.PmsBaseAttrInfo;
import com.fauks.gmall.bean.PmsBaseAttrValue;
import com.fauks.gmall.bean.PmsBaseSaleAttr;
import com.fauks.gmall.manager.mapper.PmsBaseAttrInfoMapper;
import com.fauks.gmall.manager.mapper.PmsBaseAttrValueMapper;
import com.fauks.gmall.manager.mapper.PmsBaseSaleAttrMapper;
import com.fauks.gmall.service.AttrService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

@Service
public class AttrServiceImpl implements AttrService {

    @Autowired
    private PmsBaseAttrInfoMapper baseAttrInfoMapper;

    @Autowired
    private PmsBaseAttrValueMapper baseAttrValueMapper;

    @Autowired
    private PmsBaseSaleAttrMapper baseSaleAttrMapper;

    @Override
    public List<PmsBaseAttrInfo> attrInfoList(String catalog3Id) {
        PmsBaseAttrInfo baseAttrInfo = new PmsBaseAttrInfo();
        baseAttrInfo.setCatalog3Id(catalog3Id);
        return baseAttrInfoMapper.select(baseAttrInfo);
    }

    @Override
    public String saveAttrInfo(PmsBaseAttrInfo attrInfo) {

        String attrInfoId = attrInfo.getId();
        if (StringUtils.isBlank(attrInfoId)) {
            //Id为空执行保存操作
            //保存属性
            //insert:无论对象是否为null都插入数据库
            //insertSelective:如果对象为null则不执行保存
            baseAttrInfoMapper.insertSelective(attrInfo);
            //保存属性值
            List<PmsBaseAttrValue> attrValueList = attrInfo.getAttrValueList();
            attrValueList.stream().map(pmsBaseAttrValue -> {
                pmsBaseAttrValue.setAttrId(attrInfo.getId());
                return pmsBaseAttrValue;
            }).forEach(value -> baseAttrValueMapper.insertSelective(value));
        } else {
            //Id不为空执行更新操作
            Example example = new Example(PmsBaseAttrInfo.class);
            example.createCriteria().andEqualTo("id", attrInfo.getId());
            baseAttrInfoMapper.updateByExampleSelective(attrInfo, example);
            //先删除原有属性值再执行插入
            PmsBaseAttrValue attrValueDel = new PmsBaseAttrValue();
            attrValueDel.setAttrId(attrInfo.getId());
            baseAttrValueMapper.delete(attrValueDel);
            List<PmsBaseAttrValue> attrValueList = attrInfo.getAttrValueList();
            for (PmsBaseAttrValue pmsBaseAttrValue : attrValueList) {
                pmsBaseAttrValue.setAttrId(attrInfo.getId());
                baseAttrValueMapper.insertSelective(pmsBaseAttrValue);
            }
        }
        return "success";
    }

    @Override
    public List<PmsBaseAttrValue> getAttrValueList(String attrId) {
        PmsBaseAttrValue pmsBaseAttrValue = new PmsBaseAttrValue();
        pmsBaseAttrValue.setAttrId(attrId);
        List<PmsBaseAttrValue> pmsBaseAttrValueList = baseAttrValueMapper.select(pmsBaseAttrValue);
        return pmsBaseAttrValueList;
    }

    @Override
    public List<PmsBaseSaleAttr> getBaseSaleAttrList() {
        return baseSaleAttrMapper.selectAll();
    }
}
